HDMI Displaying Color Bars

Introduction

This document will detail how to use Vivado 2021 and Vitis 2021 to display four color bars on a computer monitor via an HDMI interface by configuring hardware, software, and pin constraints. The explanation will be supplemented with the provided project module hardware design diagrams, experimental result images, and a system block diagram.

Hardware Design

Module Analysis

System Block Diagram Analysis

The system block diagram is as follows:

image-20250626150515752

PS (Processing System) Section

PL (Programmable Logic) Section

Hardware Design

Package the HDMI driver section into an IP core for direct import later.

On the basis of the previous hardware design, we need to add the ZYNQ IP core design:

image-20250625135911109

image-20250625140119414

image-20250625140224589

The IP core after configuration:

image-20250626111640069

Search for the VDMA core and configure it as shown in the figure below:

image-20250625140433000

image-20250625140638518

Search for the timing core and configure it as shown in the figure below:

image-20250625140706307

image-20250625140834752

Search for the video out core and configure it as shown in the figure below:

image-20250625140915948

image-20250625141007912

Search for the clock core and configure it as shown in the figure below:

image-20250625141143824

image-20250625141334224

image-20250625141725063

Add the custom IP: dvi_transmitter. This IP core is located in the ip_repo folder within the project directory.

image-20250902135018005

After adding it, connect and expose the external ports (only the TMDS port needs to be exposed). Connect pclk_x5 to the clkout2 of the clock output from the previous step.

image-20250902135110255

Make the connections, then click "Run Connection Automation". The modules and their interfaces that will be automatically connected are listed below. Check "All Automation" and then click the "OK" button. The system will then automatically generate two AXI Interconnect modules (axi_mem_intercon and ps7_0_axi_periph). Additionally, the system will also automatically generate one reset module (rst_ps7_0_150M) to reset the peripherals on the bus.

image-20250902135212880

After modifying the block design, save it, then regenerate Output Products and "Create HDL Wrapper". Next, we need to modify the constraints file to assign pins for the HDMI interface according to the schematic.

image-20250702110735874

image-20250624175025843

image-20250702111512801

Save the constraints file, then proceed with the subsequent steps to regenerate the BIT file.

Software Design

Right-click the created platform project, click "Update Hardware Specification", select the .xsa file path. The following dialog box will appear; click OK, which indicates a successful update. Good practice: After updating, right-click the platform project again and select "Build".

image-20250626115247673

image-20250626115304993

Compilation and Debugging

After successfully compiling the project, connect the development board's JTAG to the computer using a Type-C USB cable. Use another Type-C USB cable to connect the board's PS UART to the computer. Use an HDMI cable to connect the board's HDMI output port to the computer monitor's HDMI input port.

On the computer, open the serial debugging tool MobaXterm and establish a connection with the development board's PS UART.

image-20250626115930751

Enter debug mode in Vitis: Under "Debug As", select the first option. Running at full speed will allow you to see the debug information through the serial port.

image-20250626150414017

The debugging results are as follows:

image-20250626115909635

The running results are as follows:

image-20250626120025754